package com.huluobo.mvvm_base.net;

import com.huluobo.mvvm_base.bean.AddToCartBeanResult;
import com.huluobo.mvvm_base.bean.CartBeanResult;
import com.huluobo.mvvm_base.bean.CommentBeanResult;
import com.huluobo.mvvm_base.bean.FollowBeanResult;
import com.huluobo.mvvm_base.bean.GiftBeanResult;
import com.huluobo.mvvm_base.bean.GoodsBeanResult;
import com.huluobo.mvvm_base.bean.HomeTabBannerBeanResult;
import com.huluobo.mvvm_base.bean.HomeVideoBeanResult;
import com.huluobo.mvvm_base.bean.LikeBeanResult;
import com.huluobo.mvvm_base.bean.LikeVideoBeanResult;
import com.huluobo.mvvm_base.bean.SettingBeanResult;
import com.huluobo.mvvm_base.bean.UserBeanResult;
import com.huluobo.mvvm_base.bean.VideoBeanResult;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * Created by LC on 2024/3/22.
 * 存放所有接口地址,所有方法的返回值都是一个Observable(被观察者)
 */
public interface ApiService {
    //登录接口
    @POST(Const.URL_LOGIN)
    Observable<UserBeanResult> login(@Body RequestBody body);

    //注册接口
    @POST(Const.URL_REGISTER)
    Observable<UserBeanResult> register(@Body RequestBody body);

    //首页商品接口
    @GET(Const.URL_HOME_GOODS)
    Observable<GoodsBeanResult> getGoodsList(@Query(Const.PARAM_CATEGORY_ID) int categoryId,
                                             @Query(Const.PARAM_CURRENT_PAGE) int currentPage,
                                             @Query(Const.PARAM_PAGE_SIZE) int pageSize);

    @GET(Const.URL_HOME_VIDEO)
    Observable<HomeVideoBeanResult> getHomeVideo(@Query(Const.PARAM_CURRENT_PAGE) int currentPage,
                                                 @Query(Const.PARAM_PAGE_SIZE) int pageSize);

    @GET(Const.URL_HOME_BANNER)
    Observable<HomeTabBannerBeanResult> getHomeBanner();

    @GET(Const.URL_VIDEO_LIST)
    Observable<VideoBeanResult> getVideoList(@Query(Const.PARAM_CURRENT_PAGE) int currentPage,
                                             @Query(Const.PARAM_PAGE_SIZE) int pageSize);

    @POST(Const.URL_LIKE)
    Observable<LikeBeanResult> likeVideo(@Query(Const.PARAM_VIDEO_ID) int videoId);

    @POST(Const.URL_NO_LIKE)
    Observable<LikeBeanResult> noLikeVideo(@Query(Const.PARAM_VIDEO_ID) int videoId);

    @POST(Const.URL_FOLLOW)
    Observable<FollowBeanResult> followAuth(@Body RequestBody body);

    @GET(Const.URL_GET_COMMENT)
    Observable<CommentBeanResult> getCommentList(@Query(Const.PARAM_VIDEO_ID) int videoId);

    @POST(Const.URL_SEND_COMMENT)
    Observable<CommentBeanResult> sendComment(@Body RequestBody body);

    @POST(Const.URL_NO_FOLLOW)
    Observable<FollowBeanResult> noFollowAuth(@Body RequestBody body);

    @GET(Const.URL_GET_GIFT_LIST)
    Observable<GiftBeanResult> getGiftList();

    @POST(Const.URL_ADD_TO_CART)
    Observable<AddToCartBeanResult> addToCart(@Body RequestBody body);

    @GET(Const.URL_QUERY_CART)
    Observable<CartBeanResult> queryCartList();

    @POST(Const.URL_GET_LIKE_VIDEOS)
    Observable<LikeVideoBeanResult> getLikeVideoList();

    @POST(Const.URL_UPDATE_ADDRESS)
    Observable<SettingBeanResult> updateAddress(@Query(Const.PARAM_ADDRESS) String address);

    //上传文件必须要有Part类型,类似键值对,可以传递一个带key的文件到服务器
    @Multipart
    @POST(Const.URL_UPDATE_ICON)
    Observable<SettingBeanResult> updateIcon(@Part MultipartBody.Part part);

    @POST(Const.URL_UPDATE_BIRTH)
    Observable<SettingBeanResult> updateBirth(@Query(Const.PARAM_BIRTH) String birth);

    @POST(Const.URL_UPDATE_NICKNAME)
    Observable<SettingBeanResult> updateNickname(@Query(Const.PARAM_NICKNAME) String nickname);

    @POST(Const.URL_UPDATE_SEX)
    Observable<SettingBeanResult> updateSex(@Query(Const.PARAM_SEX) String sex);

}
